import java.rmi.AlreadyBoundException;
import java.util.InputMismatchException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-05-06
 * Time: 18:13
 */
public class TestDemo {
    public static void func(int x) throws RuntimeException{
        if (x==0){
            //System.out.println(10/x);
            throw new ArithmeticException("/ by zero");// 自定义 异常
        }
    }

    public static void main(String[] args) {

        func(0);
//        try{
//            func(0);
//        }catch (ArithmeticException e){
//            e.printStackTrace();
//        }
    }


    public static void main4(String[] args) {
        try(Scanner scanner = new Scanner(System.in);){ // 等价写法 将对象在try()中创建 就能保证在try执行后 自动调用close方法
            int n = scanner.nextInt();
            System.out.println(10/n);
        }catch (InputMismatchException e){
            e.printStackTrace();
            System.out.println("输入有误！");
        }catch (ArithmeticException e){
            e.printStackTrace();
            System.out.println("算数异常, 可能0作为除数！");
        }finally {
            // 一般作为资源的关闭
            System.out.println("finally 执行了");
        }
    }

    public static void main3(String[] args) {
        Scanner scanner = new Scanner(System.in);
        try{
            int n = scanner.nextInt();
            System.out.println(10/n);
        }catch (InputMismatchException e){
            e.printStackTrace();
            System.out.println("输入有误！");
        }catch (ArithmeticException e){
            e.printStackTrace();
            System.out.println("算数异常, 可能0作为除数！");
        }finally {
            // 一般作为资源的关闭
            scanner.close();
            System.out.println("finally 执行了");
        }
    }


    public static void main2(String[] args) {
        int[] array = {1,2,3};
        try{
            array = null;
            System.out.println(array[5]); // 当这里抛出异常之后 这个代码块下的代码不在执行
            System.out.println("hh");
        }catch (ArrayIndexOutOfBoundsException | NullPointerException e ) { //在这里可以捕捉多个异常
            e.printStackTrace(); // 通过这个变量调用 这个栈上的信息
            System.out.println("我捕捉到了一个数组越界异常或者空指针异常！");
        }
        System.out.println("哈喽");
    }


    public static void main1(String[] args) {
        int[] array = {1,2,3};
        try{
            array = null;
            System.out.println(array[5]); // 当这里抛出异常之后 这个代码块下的代码不在执行
            System.out.println("hh");
        }catch (ArrayIndexOutOfBoundsException e){  // 类型 “e” 是变量
            e.printStackTrace(); // 通过这个变量调用 这个栈上的信息
            System.out.println("我捕捉到了一个数组越界异常！");
        }catch (NullPointerException e){
            e.printStackTrace();
            System.out.println("我捕捉到了空指针异常！");
        }
        System.out.println("哈喽");
    }

}
